package com.qing.expert.modules.admin.service.impl;

import com.qing.expert.common.exception.BusinessException;
import com.qing.expert.modules.admin.service.AdminService;
import com.qing.expert.modules.user.entity.User;
import com.qing.expert.modules.user.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import jakarta.annotation.Resource;

@Slf4j
@Service
public class AdminServiceImpl implements AdminService {

    @Value("${admin.secret-key}")
    private String adminSecretKey;

    @Resource
    private UserMapper userMapper;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void becomeAdmin(String userId, String secretKey) {
        log.info("开始处理用户[{}]成为管理员的请求", userId);

        // 1. 验证密钥
        if (!adminSecretKey.equals(secretKey)) {
            log.warn("用户[{}]提供的管理员密钥不正确", userId);
            throw new BusinessException("管理员密钥不正确");
        }

        // 2. 查询用户
        User user = userMapper.selectById(userId);
        if (user == null) {
            log.error("用户[{}]不存在", userId);
            throw new BusinessException("用户不存在");
        }

        // 3. 检查用户是否已经是管理员
        if (user.getRole() == 1) { // 假设1代表管理员角色
            log.warn("用户[{}]已经是管理员", userId);
            throw new BusinessException("您已经是管理员");
        }

        // 4. 更新用户为管理员
        log.info("更新用户[{}]的角色为管理员", userId);
        user.setRole(1); // 设置为管理员角色
        int rows = userMapper.updateById(user);

        if (rows > 0) {
            log.info("用户[{}]成功成为管理员", userId);
        } else {
            log.error("更新用户[{}]角色失败", userId);
            throw new BusinessException("更新用户角色失败");
        }
    }
}